gdk: Let implicit touch grabs coexist with an implicit pointer grab
authorCarlos Garnacho <carlosg@gnome.org>
Tue, 21 Feb 2012 02:27:51 +0000 (03:27 +0100)
committerMatthias Clasen <mclasen@redhat.com>
Thu, 1 Mar 2012 21:25:26 +0000 (16:25 -0500)
Create the backing GdkTouchGrabInfo for touches even if the pointer
emulating touch sequence is already holding an implicit grab on a
window that didn't select for touch events.

gdk/gdkwindow.c

index e05a6ec6e0fcd7cf320435240ac51b2d64a5da17..a6072da9efe2a65dde0809b75c1c0f8dc17f7bd1 100644 (file)
@@ -9485,6 +9485,7 @@ proxy_button_event (GdkEvent *source_event,
   GdkWindow *parent;
   GdkEvent *event;
   GdkPointerWindowInfo *pointer_info;
+  GdkDeviceGrabInfo *pointer_grab;
   guint state;
   guint32 time_;
   GdkEventType type;
@@ -9510,11 +9511,14 @@ proxy_button_event (GdkEvent *source_event,
   sequence = gdk_event_get_event_sequence (source_event);
 
   pointer_info = _gdk_display_get_pointer_info (display, device);
+  pointer_grab = _gdk_display_has_device_grab (display, device, serial);
 
   if ((type == GDK_BUTTON_PRESS ||
        type == GDK_TOUCH_BEGIN) &&
       !source_event->any.send_event &&
-      _gdk_display_has_device_grab (display, device, serial) == NULL)
+      (!pointer_grab ||
+       (type == GDK_TOUCH_BEGIN && pointer_grab->implicit &&
+        !_gdk_event_get_pointer_emulated (source_event))))
     {
       pointer_window =
        _gdk_window_find_descendant_at (toplevel_window,